【MySQL】文字列列挙型(ENUM / SET)
MySQLの文字列の列挙型について解説します。
検証環境
文字列の列挙型
文字列の列挙型は“定義済みの値のみ保持できる文字列の型”です。
型 | 意味 |
---|---|
ENUM | 定義済みの1つの値 |
SET | 定義済みの複数の値 |
ENUM
ENUMは“定義済みの値を1つだけ保持する文字列型”です。
基本構文
カラム名 ENUM(値1, 値2 ...)
ENUMに続いて丸括弧(()
)を記述し、その中に保持可能な文字列をカンマ(,
)区切りで定義します。
サンプル
mysql> CREATE TABLE sample ( str ENUM('Apple', 'Orange', 'Pineapple', 'Grapes') );
Query OK, 0 rows affected (0.01 sec)
mysql> DESC sample;
+-------+---------------------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------------------------------+------+-----+---------+-------+
| str | enum('Apple','Orange','Pineapple','Grapes') | YES | | NULL | |
+-------+---------------------------------------------+------+-----+---------+-------+
1 row in set (0.01 sec)
mysql> INSERT INTO sample VALUE ( 'Apple' );
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO sample VALUE ( 'Pineapple' );
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM sample;
+-----------+
| str |
+-----------+
| Apple |
| Pineapple |
+-----------+
2 rows in set (0.00 sec)
mysql> INSERT INTO sample VALUE ( 'Melon' );
ERROR 1265 (01000): Data truncated for column 'str' at row 1
※ 定義以外の文字列を格納しようとするとエラーが発生します。
SET
SETは“定義済みの値を複数個保持する文字列型”です。
基本構文
カラム名 SET(値1, 値2 ...)
ENUMと同様にSETに続いて丸括弧(()
)を記述し、その中に保持可能な文字列をカンマ(,
)区切りで定義します。
サンプル
mysql> CREATE TABLE sample ( str SET('Apple', 'Orange', 'Pineapple', 'Grapes') );
Query OK, 0 rows affected (0.01 sec)
mysql> DESC sample;
+-------+--------------------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------------------------------------+------+-----+---------+-------+
| str | set('Apple','Orange','Pineapple','Grapes') | YES | | NULL | |
+-------+--------------------------------------------+------+-----+---------+-------+
1 row in set (0.01 sec)
mysql> INSERT INTO sample VALUE ( 'Apple' );
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO sample VALUE ( 'Pineapple,Grapes' );
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO sample VALUE ( 'Apple,Orange,Grapes' );
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM sample;
+---------------------+
| str |
+---------------------+
| Apple |
| Pineapple,Grapes |
| Apple,Orange,Grapes |
+---------------------+
3 rows in set (0.00 sec)
値を複数指定する場合はカンマ区切りで記述します。